<template>
  <div class="app-container">


    <!-- 表格组件 -->
    <ex-tree-table
      ref="exTreeTable"
      :tableColumn="tableColumn"
      :tableData="tableData"
      :loading.sync="loading"
      @handleCreateEmit="handleCreateEmit"
      @handleUpdateEmit="handleUpdateEmit"
      @handleRmoveColEmit="handleRmoveColEmit"
      @handleAddSonNodeEventEmit="handleAddSonNodeEventEmit"

      @handleInParameterEventEmit="handleInParameterEventEmit"
      @handleOutParameterEventEmit="handleOutParameterEventEmit"
      >
    </ex-tree-table>


    <!-- 表单提价组件 -->
    <submit-form
      ref="submitForm"
      :dialogFormVisible.sync="dialogFormVisible"
      :dialogStatus="dialogStatus"
      :formSubmitData.sync="formSubmitData"
      :parentNodeName="parentNodeName"
      :allNodeTypesOptions="allNodeTypesOptions"
      @handleFromUpdateDataEmit="handleFromUpdateDataEmit"
      @handleFromCreateDataEmit="handleFromCreateDataEmit"
      @handleFromAddSonNodeEmit="handleFromAddSonNodeEmit"
      @resetFormDataEmit="resetFormSubmitData"
      >
    </submit-form>

    <!--入参 -->
    <InParameterTable
      ref="inParameterTable"
      :dialogFormVisible.sync="dialogInParameterTableVisible"
      :currentRow="currentRow"
      :sonCurrentRow="sonCurrentRow"
    />


    <!-- 出参 -->
    <OutParameterTable
      ref="outParameterTable"
      :dialogFormVisible.sync="dialogOutParameterTableVisible"
      :currentRow="currentRow"
      :sonCurrentRow="sonCurrentRow"
    />



  </div>
</template>

<script>
// 这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
// import PageHeaderLayout from '@/layouts/PageHeaderLayout'
// import ApeDrawer from '@/components/ApeDrawer'
// import { mapGetters } from 'vuex'
import XEUtils from 'xe-utils'

import resetFormSubmitData from '@/views/mixins/resetFormSubmitData'

import {
findtask_s,
delsTask,
addsTask,
updatesTask,
findNodeType,
addcoaCodeZi,
addcoaCode,

} from './service/baseApi'
// 基础表格组件
import ExTreeTable from './components/ExTreeTable'

// 文章表单
import SubmitForm from './components/SubmitForm'




// 入参
import InParameterTable from './components/InParameterTable'
// 出参
import OutParameterTable from './components/OutParameterTable'


export default {
  name: 'vxe-basetable',
  mixins: [resetFormSubmitData],
  components: {
    //PageHeaderLayout,
    ExTreeTable,
    SubmitForm,
    InParameterTable,
    OutParameterTable
  },
  props: {
    /* 当前选中方案 */
    currentRow: {
      type: Object,
      default() {
        return {}
      }
    },
    /* 当前选中方案的已选因子 */
    factorSelected: {
      type: Array,
      default() {
        return []
      }
    }
  },
  // 定义属性
  data() {
    return {


      /* 表单相关 */
      dialogFormVisible: false, // 修改删除弹出框
      dialogStatus: '',
      parentNodeName: '',  //父级节点名称
      allNodeTypesOptions:[],
      initNodeType:'1', //初始化节点的节点类型

      // 表单数据对象
      formSubmitData: {
        id: undefined,
        node_name: '',
        node_code: '',
        parent_node_name: '',
        node_type: '',
        acs_code: '',
        path_pg_name: '',
        remark: '',
      },
      initFormSubmitData: {
        id: undefined,
        node_name: '',
        node_code: '',
        parent_node_name: '',
        node_type: '',
        acs_code: '',
        path_pg_name: '',
        remark: '',
      },
      /* 表格相关 */
      tableColumn: [], // 表格字段
      loading: false, //表格loading特效
      tableData: [],  //表格数据

      /* 当前选中节点 */
      sonCurrentRow: {},

      /* 入参 */
      dialogInParameterTableVisible: false, // 修改删除弹出框

      /* 出参 */
      dialogOutParameterTableVisible: false, // 修改删除弹出框




    } //datareturn-end

  },
  // 计算属性，会监听依赖属性值随之变化
  computed: {},
  // 监控data中的数据变化
  watch: {
    currentRow() {
      this.findList()
    }
  },
  // 方法集合
  methods: {
    /* API数据操作相关 */
    // 获取首节点编码
    async getAddcoaCode() {
      return await addcoaCode({
        m_id:this.currentRow.id
      }).then(({data}) => {
        return data.rows.node_code
      })
    },
    // 获取子节点编码
    async getAddcoaCodeZi(parent_node_name) {
     return await addcoaCodeZi({
        m_id:this.currentRow.id,
        parent_node_name
      }).then(({data}) => {
        return data.rows.node_code
      })
    },
    // 获取所有节点类型
    async findfindNodeType(){
      await findNodeType().then(({data}) => {
        this.allNodeTypesOptions =  XEUtils.map(data.rows, item => {
          return {
            label:item.name,
            value:item.code,
            disabled: this.initNodeType === item.code
            // disabled:false
          }
        })  
      })
    },

  
    // 查询数据
    findList() {
      this.loading = true
      // console.log(' this.formSearchData:::', this.formSearchData);
      // 请求表格数据

      findtask_s({
        m_id: this.currentRow.id
      }).then(({data}) => {
        // console.log('response:....', data);
        // 给表格数据赋值
        const treeData = XEUtils.toArrayTree(data.rows, {
          key: 'node_code',
          parentKey: 'parent_node_name',
        })
        // console.log('treeDatatreeData', treeData);
        this.tableData = treeData
        // 关闭加载特效
        setTimeout(() => {
          this.loading = false
        }, 0.5 * 1000)
      })
    },
    /* 表格组件相关 */
    // 初始化表格字段
    initTableCols() {
      const tabCols = [  //动态增加的字段 传进来的
      // 节点类型、 节点代码 、 节点名称 、访问源、路径+程序名、上级节点代码、备注；
      {field: 'node_name', title: '节点名称', width: 250, treeNode: true, fixed: 'left'},
      {field: 'node_code', title: '节点代码', width: 300},
      {field: 'node_type_name', title: '节点类型', width: 300},
      {field: 'acs_code', title: '访问源', width: 300},
      {field: 'path_pg_name', title: '路径+程序名', width: 300},
      {field: 'parent_node_name', title: '上级节点代码', width: 300},
      {field: 'remark', title: '备注', width: 300},


        // { type: 'seq', width: 60, fixed: null },
        // { type: 'checkbox', width: 50, fixed: null },
        // {field: 'coa_name', title: '节点名称', width: 250, treeNode: true, fixed: 'left'},
        // // { field: 'ID', title: '主键', width: 200 , showOverflow: true},
        // {field: 'coa_code', title: '节点编码', width: 300},
        // {field: 's_date', title: '生效时间', width: 200},
        // {field: 'e_date', title: '失效时间', width: 200},
        // {field: 'name', title: '定价方法', width: 200},
        // {
        //   field: 'status', title: '状态', width: 300, formatter(obj) {
        //     console.log('formatterformatter', obj);
        //     if (obj.cellValue === 0) {
        //       return "无效"
        //     } else {
        //       return "有效"
        //     }
        //   }
        // }
      ]
      this.tableColumn = tabCols;
    },
    // 表格工具组-新增表单弹窗（需要表单组件）
    handleCreateEmit(type) {
      this.getAddcoaCode().then((node_code) => {
        // 重置表单内容
        this.resetFormSubmitData({
          replaceObj: {
            node_code,
            node_type:'1'
          }
        })
        this.parentNodeName = '初始化'
        this.dialogStatus = type
        this.dialogFormVisible = true
        this.$nextTick(() => {
          this.$refs.submitForm.$refs['dataForm'].clearValidate()
        })
      })
    },
    // 行内按钮-修改数据弹窗（需要表单组件）
    handleUpdateEmit(row, type) {
      // let {children, mod_date, mod_us_code, ...params} = Object.assign({}, row) // copy obj
      // console.log('item:', params);
      // params = XEUtils.objectMap(params, item => {
      //   return (XEUtils.isNull(item)) ? '' : item
      // })
      // console.log('item2:', params);
      // this.formSubmitData = params

      this.formSubmitData = Object.assign({}, row)

      this.dialogStatus = type
      this.dialogFormVisible = true
      this.$nextTick(() => {
        this.$refs.submitForm.$refs['dataForm'].clearValidate()
      })
    },
    // 单行删除
    handleRmoveColEmit(row) {
      console.log('delrow:', row);
      if (row.children.length > 0) {
        this.$message.error('删除失败:还有子集！');
        return false;
      }
      delsTask({
        id:row.id
      }).then(({data}) => {
        // this.dialogFormVisible = false
        // this.$refs.exTreeTable.$refs.xTree.remove(row)
        this.findList()
      })

    },
    // 行内按钮-新增子节点
    handleAddSonNodeEventEmit(row, type) {

      this.getAddcoaCodeZi(row.node_code).then((node_code) => {
        console.log('node_codenode_codenode_code',node_code);
        // 重置表单内容
        this.resetFormSubmitData({
          replaceObj: {
            parent_node_name: row.node_code, 
            node_code:node_code
          },
        })
        this.parentNodeName = `父节点：${row.node_name}`
        this.dialogStatus = type
        this.dialogFormVisible = true
        this.$nextTick(() => {
          this.$refs.submitForm.$refs['dataForm'].clearValidate()
        })
      })

    },

    /* 表单组件相关 */
    // 修改节点
    handleFromUpdateDataEmit() {
      updatesTask({
        ...this.formSubmitData
      }).then(({data}) => {
        this.dialogFormVisible = false
        this.findList()
      })

    },
    // 新增首节点
    handleFromCreateDataEmit() {

      addsTask({
        m_id: this.currentRow.id,
        ...this.formSubmitData
      }).then(({data}) => {
        this.dialogFormVisible = false
        this.findList()
      })
    },
    // 新增子节点
    handleFromAddSonNodeEmit() {
      addsTask({
        m_id: this.currentRow.id,
        ...this.formSubmitData
      }).then(({data}) => {
        this.dialogFormVisible = false
        this.findList()
      })
    },

      /**
     * 入参弹窗子表
     * @param {Object} row 
     */
    handleInParameterEventEmit(row) {
      this.sonCurrentRow = Object.assign({}, row)
      this.dialogInParameterTableVisible = true
    },
    /**
     * 出参弹窗子表
     * @param {Object} row 
     */
    handleOutParameterEventEmit(row) {
      this.sonCurrentRow = Object.assign({}, row)
      this.dialogOutParameterTableVisible = true
    },



    

    /**
     * 调度项范围
     */
    /* 
      dialogSchedulingFactorVisible: false,
      schedulingFactorValue: [1001],
      schedulingFactorData
    */
    // 调度项范围-全量数据
    // findFindAdjustmentitemcodename() {
    //   findAdjustmentitemcodename().then(({data}) => {
    //     this.schedulingFactorData = XEUtils.map(data.rows, (item) => {
    //       return {
    //         label: `${item.code}-${item.name}`,
    //         key: item.code,
    //         disabled: false
    //       }
    //     })
    //   })
    // },
   



  }, //method-end
  // 生命周期 - 创建完成（可以访问当前this实例）
  async created() {

    // 初始化表格字段
    await this.initTableCols()
    // 初始化表格数据
    await this.findList()
    await this.findfindNodeType()
  },
  // 生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {

  },
  beforeCreate() {
  }, // 生命周期 - 创建之前
  beforeMount() {
  }, // 生命周期 - 挂载之前
  beforeUpdate() {
  }, // 生命周期 - 更新之前
  updated() {
  }, // 生命周期 - 更新之后
  beforeDestroy() {
  }, // 生命周期 - 销毁之前
  destroyed() {
  }, // 生命周期 - 销毁完成
  activated() {
  }, // 如果页面有keep-alive缓存功能，这个函数会触发
}
</script>

<style lang='scss' scoped>


.my-dropdown4 {
  width: 600px;
  height: 300px;
  background-color: #fff;
  border: 1px solid #dcdfe6;
  box-shadow: 0 0 6px 2px rgba(0, 0, 0, 0.1);
}
</style>